package com.bryant.bryant_weather

import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.viewpager2.widget.ViewPager2

class MainActivity : AppCompatActivity() {

    // ============================= 变量定义 ==================================

    // 1. 可空的ViewPager2实例，用于页面切换
    private var viewPager: ViewPager2? = null

    // 2. 可空的ViewPagerAdapter实例，用于管理页面数据
    private var adapter: ViewPagerAdapter? = null

    // 3. 当前页面位置
    private var currentPosition = 0
    // -----------------------------------------------------------------------------

    // =========================== OnCreate 生命周期 =======================================
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 该方法作用：配置Activity的布局，并返回一个View对象作为Activity的根视图
        setContentView(R.layout.ac_main)

        // 1. 添加点击事件
        addClickEvent()
        // 3. 恢复状态 - savedInstanceState 是 Android Activity 中的一个重要参数，用于保存和恢复界面状态。
        if(savedInstanceState != null){
            currentPosition = savedInstanceState.getInt("currentPosition", 0)
        }

        // 2. 加载Fragment
        loadFragment()

        // 4. 恢复选中项
        viewPager?.currentItem = currentPosition
    }
    //-------------------------------------------------------------------------------------

    // ============================ 点击事件 ================================================
    private fun addClickEvent() {
        // 1. 获取相关控件
        /*
        * 这行代码的作用是通过 findViewById 方法查找 ID 为 llBottomNavigation 的视图组件，
        * 并将其强制转换为 ViewGroup 类型。
        * 这意味着开发者预期这个组件是一个可以容纳其他视图的容器（例如底部导航栏通常会包含多个按钮或菜单项）
        * */
        val bottomNavigationView = findViewById<ViewGroup>(R.id.llBottomNavigation)
        val homeContainer = bottomNavigationView.findViewById<ViewGroup>(R.id.nav_home)
        val lifeContainer = bottomNavigationView.findViewById<ViewGroup>(R.id.nav_life)
        val profileContainer = bottomNavigationView.findViewById<ViewGroup>(R.id.nav_profile)

        // 2. 添加点击事件
        // 2.1 点击导航栏首页
        // ----- Lambda表达式 ---
        /*homeContainer.setOnClickListener {
            setCurrentTab(0)
        }*/
        // ------- 匿名内部类 ---- 只有在需要访问点击事件的 View 参数或者有复杂逻辑时，才考虑使用匿名内部类的方式
        homeContainer.setOnClickListener(object : View.OnClickListener {
            override fun onClick(v: View?) {
                // a. 页面切换（通过ViewPager）
                viewPager?.currentItem = 0
                // b. 更新底部导航栏选中项
                setCurrentTab(0)
            }

        })

        // 2.2 点击导航栏收藏
        lifeContainer.setOnClickListener(object : View.OnClickListener {
            override fun onClick(v: View?) {
                // a. 页面切换（通过ViewPager）
                viewPager?.currentItem = 1
                // b. 更新底部导航栏选中项
                setCurrentTab(1)
            }
        })
        // 2.3 点击导航栏我的
        profileContainer.setOnClickListener(object : View.OnClickListener {
            override fun onClick(v: View?) {
                // a. 页面切换（通过ViewPager）
                viewPager?.currentItem = 2
                // b. 更新底部导航栏选中项
                setCurrentTab(2)
            }
        })
    }

    // 通过事件绑定控件并根据传入参数改变样式
    private fun setCurrentTab(position: Int) {

        // 1. 先获取控件
        val bottomNavigationView = findViewById<ViewGroup>(R.id.llBottomNavigation)

        val tvHome = bottomNavigationView.findViewById<TextView>(R.id.tv_home)
        var imageHome = bottomNavigationView.findViewById<ImageView>(R.id.img_home)

        val tvLife = bottomNavigationView.findViewById<TextView>(R.id.tv_life)
        var imageLife = bottomNavigationView.findViewById<ImageView>(R.id.img_life)

        val tvProfile = bottomNavigationView.findViewById<TextView>(R.id.tv_profile)
        var imageProfile = bottomNavigationView.findViewById<ImageView>(R.id.img_profile)

        // 根据传入参数position改变样式 - 0首页 1生活 2我的
        // when语法用法: 当参数与case匹配时，执行case中的代码
        when (position) {
            0 -> {
                tvHome.setTextColor(resources.getColor(R.color.weather_primary, null))
                imageHome.setColorFilter(resources.getColor(R.color.weather_primary, null))

                tvLife.setTextColor(resources.getColor(R.color.default_gray, null))
                imageLife.setColorFilter(resources.getColor(R.color.default_gray, null))

                tvProfile.setTextColor(resources.getColor(R.color.default_gray, null))
                imageProfile.setColorFilter(resources.getColor(R.color.default_gray, null))
            }

            1 -> {
                tvHome.setTextColor(resources.getColor(R.color.default_gray, null))
                imageHome.setColorFilter(resources.getColor(R.color.default_gray, null))

                tvLife.setTextColor(resources.getColor(R.color.weather_primary, null))
                imageLife.setColorFilter(resources.getColor(R.color.weather_primary, null))

                tvProfile.setTextColor(resources.getColor(R.color.default_gray, null))
                imageProfile.setColorFilter(resources.getColor(R.color.default_gray, null))
            }

            2 -> {
                tvHome.setTextColor(resources.getColor(R.color.default_gray, null))
                imageHome.setColorFilter(resources.getColor(R.color.default_gray, null))

                tvLife.setTextColor(resources.getColor(R.color.default_gray, null))
                imageLife.setColorFilter(resources.getColor(R.color.default_gray, null))

                tvProfile.setTextColor(resources.getColor(R.color.weather_primary, null))
                imageProfile.setColorFilter(resources.getColor(R.color.weather_primary, null))
            }
        }
    }
    // -------------------------------------------------------------------------------------

    // ============================ 加载Fragment ============================================
    private fun loadFragment() {
        // 1. 滑动控件处理
        if (viewPager == null) {

            // 1. 初始化操作， 绑定vpMain
            viewPager = findViewById(R.id.vpMain)
            // 2.设置禁止页面滑动
            viewPager?.isUserInputEnabled = false
            // 3. 注册页面切换监听
            viewPager?.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
                override fun onPageSelected(position: Int) {
                    super.onPageSelected(position)
                    // 1. 改变底部导航栏选中项
                    setCurrentTab(position)
                    currentPosition = position
                }
            })
        }

        // 2. 初始化适配器
        if (adapter == null) {
            // this 指的是 MainActivity 实例本身。
            adapter = ViewPagerAdapter(this)
        }
        // 3. 给ViewPager2绑定适配器 - ViewPager2 内部通过 ViewPagerAdapter 加载对应页面内容
        viewPager?.adapter = adapter
        // 4. 设置缓存页面数量
        viewPager?.offscreenPageLimit = 2
    }
}